package org.opencv.samples.puzzle15; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.core.Mat; import org.opencv.android.CameraBridgeViewBase; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; public class Puzzle15Activity extends Activity implements CvCameraViewListener, View.OnTouchListener { private static final String TAG = "Sample::Puzzle15::Activity"; private CameraBridgeViewBase mOpenCvCameraView; private Puzzle15Processor mPuzzle15; private int mGameWidth; private int mGameHeight; private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); /* Now enable camera view to start receiving frames */ mOpenCvCameraView.setOnTouchListener(Puzzle15Activity.this); mOpenCvCameraView.enableView(); } break; default: { super.onManagerConnected(status); } break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.activity_puzzle15); mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.puzzle_activity_surface_view); mOpenCvCameraView.setCvCameraViewListener(this); mPuzzle15 = new Puzzle15Processor(); mPuzzle15.prepareNewGame(); } @Override public void onPause() { if (mOpenCvCameraView != null) mOpenCvCameraView.disableView(); super.onPause(); } @Override public void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); } public void onDestroy() { super.onDestroy(); if (mOpenCvCameraView != null) mOpenCvCameraView.disableView(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_puzzle15, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG, "Menu Item selected " + item); if (item.getItemId() == R.id.menu_start_new_game) { /* We need to start new game */ mPuzzle15.prepareNewGame(); } else if (item.getItemId() == R.id.menu_toggle_tile_numbers) { /* We need to enable or disable drawing of the tile numbers */ mPuzzle15.toggleTileNumbers(); } return true; } public void onCameraViewStarted(int width, int height) { mGameWidth = width; mGameHeight = height; mPuzzle15.prepareGameSize(width, height); } public void onCameraViewStopped() { } public Mat onCameraFrame(Mat inputFrame) { return mPuzzle15.puzzleFrame(inputFrame); } public boolean onTouch(View view, MotionEvent event) { int xpos, ypos; xpos = (view.getWidth() - mGameWidth) / 2; xpos = (int)event.getX() - xpos; ypos = (view.getHeight() - mGameHeight) / 2; ypos = (int)event.getY() - ypos; if (xpos >=0 && xpos <= mGameWidth && ypos >=0 && ypos <= mGameHeight) { /* click is inside the picture. Deliver this event to processor */ mPuzzle15.deliverTouchEvent(xpos, ypos); } return false; } }